// Copyright (C) 2023 即时通讯网(52im.net) & Jack Jiang.
// The RainbowChat Project. All rights reserved.
// 
// 【本产品为著作权产品，合法授权后请放心使用，禁止外传！】
// 【本次授权给：<北京小羊驼科技有限公司>，授权编号：<NT231212144350>，代码指纹：<A.702363430.550>，技术对接人微信：<ID: wxid_wbyootvkdcgj22>】
// 【授权寄送：<收件：苏先生、地址：北京市大兴区北京密码西区6号楼1单元301、电话：18613885610、邮箱：bd@huiyuanxiang-inc.com>】
// 
// 【本系列产品在国家版权局的著作权登记信息如下】：
// 1）国家版权局登记名(简称)和权证号：RainbowChat    （证书号：软著登字第1220494号、登记号：2016SR041877）
// 2）国家版权局登记名(简称)和权证号：RainbowChat-Web（证书号：软著登字第3743440号、登记号：2019SR0322683）
// 3）国家版权局登记名(简称)和权证号：RainbowAV      （证书号：软著登字第2262004号、登记号：2017SR676720）
// 4）国家版权局登记名(简称)和权证号：MobileIMSDK-Web（证书号：软著登字第2262073号、登记号：2017SR676789）
// 5）国家版权局登记名(简称)和权证号：MobileIMSDK    （证书号：软著登字第1220581号、登记号：2016SR041964）
// * 著作权所有人：江顺/苏州网际时代信息科技有限公司
// 
// 【违法或违规使用投诉和举报方式】：
// 联系邮件：jack.jiang@52im.net
// 联系微信：hellojackjiang
// 联系QQ号：413980957
// 授权说明：http://www.52im.net/thread-1115-1-1.html
// 官方社区：http://www.52im.net
package com.x52im.rainbowchat.http.file.u;

import java.io.File;
import java.util.HashMap;

import com.eva.epc.common.util.se.ImgEqualScaleAndCutHelper;
import com.eva.framework.httpfile.FileUpload;
import com.eva.framework.utils.LoggerFactory;
import com.x52im.rainbowchat.BaseConf;
import com.x52im.rainbowchat.http.logic.LogicUtils;

/**
 * 我的相册中的图片文件上传处理实现类。
 * 
 * @author Json
 * @sin 2.0
 */
public class MyPhotoUploder extends UploaderRoot
{
	@Override
	protected String getFileSaveDir()
	{
		return BaseConf.getInstance().getDIR_USER_PHOTO_UPLOAD();
	}

	@Override
	protected void onUploadSucess(HashMap<String, Object> parametersFromClient) throws Exception
	{
		String userUid = (String)parametersFromClient.get("user_uid");
		// 因为服务端是支持多文件上传的API，所以客户端单独把文件名带过来了，方便使用！
		String fileName = (String)parametersFromClient.get("file_name");
//		// 客户端传过来的token，用于请求的合法性检查，当前未作强制检查，留作以后使用
//		String token = (String)parametersFromClient.get("token");
		
		LoggerFactory.getLog().debug("["+getDebugTAG()+"] 用户"+userUid+"的照片文件"+fileName +"数据上传成功，马上处理其它业务逻辑...");
		
		// 客户端传过来的数据（参数）的合法性检查
		if(userUid != null && fileName != null)
		{
			String uploadPath = getFileSaveDir();
			// 图片文件已经保存到的磁盘绝对路径
			File filePath = new File(uploadPath + File.separator + fileName);
			
			if(filePath.exists())
			{
				// 生成原图的缩略图并存到磁盘
				File thumbnailFilePath = new File(uploadPath + File.separator + "th_" + fileName);
				// 如果该md5文件名命名（其实此md5码就是文件数据的指纹）存在，即意味着不需要写入磁盘了
				if(!thumbnailFilePath.exists())
				{
					// 如果是照片则启用新的等经缩放并裁切的算法（此算法自2014-03-29实施），算法将保证缩略图的生成不变形
					try
					{
						ImgEqualScaleAndCutHelper.saveImageAsJpg(filePath.getAbsolutePath(), thumbnailFilePath.getAbsolutePath()
								, 245, 245 // 生成的缩略图参考QQ空间的按245*245的极限缩放
								);
					}
					catch (Exception e)
					{
						LoggerFactory.getLog().warn("["+getDebugTAG()+"] 图片缩略图生成（新算法不可靠，需优化？）出错了！", e);
					}
				}
				
				// 如果上传的是用户照片，则同时要插入一条数据到db中
				LogicUtils.inserUsersBinary(userUid, true, fileName, filePath.length());
			}
			else
			{
				LoggerFactory.getLog().error("["+getDebugTAG()+"] 用户"+userUid+"的照片文件"+fileName+"为何不存在？(绝对路径="+filePath.getAbsolutePath()+")");
			}
		}
		else
		{
			throw new Exception("["+getDebugTAG()+"] 无效的参数：userUid="+userUid+", fileName="+fileName+".");
		}
	}

	@Override
	protected void onUploadFailure(Exception ex)
	{
		LoggerFactory.getLog().error("["+getDebugTAG()+"] 处理照片上传时出错了，"+ex.getMessage(), ex);
	}
	
	@Override
	protected String getDebugTAG()
	{
		return "HTTP照片上传";
	}
}

